// 执行分页，生成页面效果，任何时候调用这个函数都会重新加载页面
function generatePage() {

    // 获取分页数据
    var pageInfo = getPageInfoRemote();

    // 填充表格
    fillTableBody(pageInfo);

}

// 远程访问服务端程序获取pageInfo数据
function getPageInfoRemote() {


    // 调用$.ajax()函数发送请求并接受$.ajax()函数的返回值
    var ajaxResult = $.ajax({
        "url": "role/get/page/info.json",
        "type": "post",
        "data": {
            "pageNum": window.pageNum,
            "pageSize": window.pageSize,
            "keyword": window.keyword
        },
        "async": false,// 将请求设为同步
        "dataType": "json"
    });

    console.log(ajaxResult);

    // 判断当前响应状态码是否为 200
    var statusCode = ajaxResult.status;

    // 如果当前响应状态码不是 200，说明发生了错误或其他意外情况，显示提示消息，让当前函数停止执行
    if (statusCode != 200) {
        layer.msg("失败！响应状态码=" + statusCode + " 说明信息=" + ajaxResult.statusText);
        return null;
    }

    // 如果响应状态码是 200，说明请求处理成功，获取 pageInfo
    var resultEntity = ajaxResult.responseJSON;

    // 从 resultEntity 中获取 result 属性
    var result = resultEntity.result;

    // 判断 result 是否成功
    if (result == "FAILED") {
        layer.msg(resultEntity.message);
        return null;
    }

    // 确认 result 为成功后获取 pageInfo
    var pageInfo = resultEntity.data;

    // 返回 pageInfo
    return pageInfo;

}

// 填充表格
function fillTableBody(pageInfo) {

    // 清除 tbody 中的旧的内容
    $("#rolePageBody").empty();

    // 没有搜索结果时不显示页码导航条
    $("#Pagination").empty();

    // 判断 pageInfo 对象是否有效
    if(pageInfo == null || pageInfo == undefined || pageInfo.list == null || pageInfo.list.length == 0) {

        $("#rolePageBody").append("<tr><td colspan='4' align='center' color='red'>抱歉！没有查询到您搜索的数据！</td></tr>");

        return ;
    }

    // 使用 pageInfo 的 list 属性填充 tbody
    for(var i = 0; i < pageInfo.list.length; i++) {
        var role = pageInfo.list[i];

        var roleId = role.id;

        var roleName = role.name;

        var numberTd = "<td>" + (i + 1) + "</td>";
        var checkboxTd = "<td><input id='"+roleId+"' class='itemBox' type='checkbox'></td>";
        var roleNameTd = "<td>" + roleName + "</td>";

        var checkBtn = "<button id='"+roleId+"' type='button' class='btn btn-success btn-xs checkBtn'><i class=' glyphicon glyphicon-check'></i></button>";
        var pencilBtn = "<button id='"+roleId+"' type='button' class='btn btn-primary btn-xs pencilBtn'><i class=' glyphicon glyphicon-pencil'></i></button>";
        var removeBtn = "<button id='"+roleId+"' type='button' class='btn btn-danger btn-xs removeBtn'><i class=' glyphicon glyphicon-remove'></i></button>";

        var buttonTd = "<td>"+checkBtn+" "+pencilBtn+" "+removeBtn+"</td>";

        var tr = "<tr>"+numberTd+checkboxTd+roleNameTd+buttonTd+"</tr>";

        $("#rolePageBody").append(tr);

        // 生成分页页码导航条
        generateNavigator(pageInfo);
    }

}

// 生成分页页码导航条
function generateNavigator(pageInfo) {

    // 获取总记录数
    var totalRecord = pageInfo.total;

    // 声明相关属性
    var properties = {
        num_edge_entries: 3,
        num_display_entries: 5,
        callback: paginationCallBack,
        items_per_page: pageInfo.pageSize,
        current_page: pageInfo.pageNum - 1,
        prev_text: "上一页",
        next_text: "下一页"
    }

    // 调用 pagination()函数
    $("#Pagination").pagination(totalRecord, properties);

}

// 翻页时的回调函数
function paginationCallBack(pageIndex, jQuery) {

    // 修改 window 对象的 pageNum 属性
    window.pageNum = pageIndex + 1;

    // 调用分页函数
    generatePage();

    // 将全选框取消勾选
    $("#summaryBox").removeAttr("checked");

    // 取消页码超链接的默认行为
    return false;

}

// 声明专门的函数显示确认模态框
function showConfirmModal(roleArray) {
    // 打开模态框
    $("#confirmModal").modal("show");
    // 清除旧的数据
    $("#roleNameDiv").empty();

    // 在全局变量范围创建数组用来存放角色 id
    window.roleIdArray = [];

    // 遍历 roleArray 数组
    for(var i = 0; i < roleArray.length; i++) {
        var role = roleArray[i];
        var roleName = role.roleName;
        $("#roleNameDiv").append(roleName+"<br/>");
        var roleId = role.roleId;

        // 调用数组对象的 push()方法存入新元素
        window.roleIdArray.push(roleId);
    }

}


// 生成模态框中的Auth树形结构
function fillAuthTree(){

    var ajaxReturn = $.ajax({
        "url": "assign/get/all/auth.json",
        "type": "post",
        "dataType": "json",
        "async": false,
    });

    // 如果状态码不是200则弹窗报错
    if (ajaxReturn.status != 200){

        layer.msg("请求处理错误，响应状态码是："+ajaxReturn.status+"说明是："+ajaxReturn.statusText);
        return ;
    }

    // 从响应结果中获取Auth的JSON数据
    var authList = ajaxReturn.responseJSON.data;

    // 准备对ztree进行设置的JSON对象
    var setting = {
        "data":{
            "simpleData": {
                // 开启简单的JSON功能
                "enable":true,
                "pIdKey":"categoryId"
            },

            "key":{
                "name":"title"
            },
        },
        // 设置checkbox为显示
        "check":{
            "enable":true
        }
    };

    // 初始化树形结构
    $.fn.zTree.init($("#authTreeDemo"), setting,authList);

    // 获取ztree对象
    var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");

    // 展开所有节点
    zTreeObj.expandAll(true);

    // 5.查询已分配的 Auth 的 id 组成的数组
    ajaxReturn = $.ajax({
        "url":"assign/get/assigned/auth/id/by/role/id.json",
        "type":"post",
        "data":{
            "roleId":window.roleId
        },
        "dataType":"json",
        "async":false
    });

    if(ajaxReturn.status != 200) {

        layer.msg(" 请 求 处 理 出 错 ！ 响 应 状 态 码 是 ： "+ajaxReturn.status+" 说 明 是 ："+ajaxReturn.statusText);
        return ;
    }

    // 获取auth的id值集合
    var authIdList = ajaxReturn.responseJSON.data;

    // 回显表单，将对应的节点勾上
    for(var i = 0; i < authIdList.length; i++) {

        var authId = authIdList[i];

        // 根据 id 查询树形结构中对应的节点
        var treeNode = zTreeObj.getNodeByParam("id", authId);

        // 执行勾选
        zTreeObj.checkNode(treeNode, true, false);
    }
}
